home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 98 / Skunkware 98.iso / src / interp / perl5.005.tar.gz / perl5.005.tar / perl5.005 / av.h < prev    next >
C/C++ Source or Header  |  1998-02-03  |  2KB  |  52 lines

  1. /*    av.h
  2.  *
  3.  *    Copyright (c) 1991-1998, Larry Wall
  4.  *
  5.  *    You may distribute under the terms of either the GNU General Public
  6.  *    License or the Artistic License, as specified in the README file.
  7.  *
  8.  */
  9.  
  10. struct xpvav {
  11.     char*    xav_array;      /* pointer to first array element */
  12.     SSize_t    xav_fill;       /* Index of last element present */
  13.     SSize_t    xav_max;        /* Number of elements for which array has space */
  14.     IV        xof_off;    /* ptr is incremented by offset */
  15.     double    xnv_nv;        /* numeric value, if any */
  16.     MAGIC*    xmg_magic;    /* magic for scalar array */
  17.     HV*        xmg_stash;    /* class package */
  18.  
  19.     SV**    xav_alloc;    /* pointer to malloced string */
  20.     SV*        xav_arylen;
  21.     U8        xav_flags;
  22. };
  23.  
  24. #define AVf_REAL 1    /* free old entries */
  25. #define AVf_REIFY 2    /* can become real */
  26. #define AVf_REUSED 4    /* got undeffed--don't turn old memory into SVs now */
  27.  
  28. #define Nullav Null(AV*)
  29.  
  30. #define AvARRAY(av)    ((SV**)((XPVAV*)  SvANY(av))->xav_array)
  31. #define AvALLOC(av)    ((XPVAV*)  SvANY(av))->xav_alloc
  32. #define AvMAX(av)    ((XPVAV*)  SvANY(av))->xav_max
  33. #define AvFILLp(av)    ((XPVAV*)  SvANY(av))->xav_fill
  34. #define AvARYLEN(av)    ((XPVAV*)  SvANY(av))->xav_arylen
  35. #define AvFLAGS(av)    ((XPVAV*)  SvANY(av))->xav_flags
  36.  
  37. #define AvREAL(av)    (AvFLAGS(av) & AVf_REAL)
  38. #define AvREAL_on(av)    (AvFLAGS(av) |= AVf_REAL)
  39. #define AvREAL_off(av)    (AvFLAGS(av) &= ~AVf_REAL)
  40. #define AvREIFY(av)    (AvFLAGS(av) & AVf_REIFY)
  41. #define AvREIFY_on(av)    (AvFLAGS(av) |= AVf_REIFY)
  42. #define AvREIFY_off(av)    (AvFLAGS(av) &= ~AVf_REIFY)
  43. #define AvREUSED(av)    (AvFLAGS(av) & AVf_REUSED)
  44. #define AvREUSED_on(av)    (AvFLAGS(av) |= AVf_REUSED)
  45. #define AvREUSED_off(av) (AvFLAGS(av) &= ~AVf_REUSED)
  46.  
  47. #define AvREALISH(av)    (AvFLAGS(av) & (AVf_REAL|AVf_REIFY))
  48.                                           
  49. #define AvFILL(av)    ((SvRMAGICAL((SV *) (av))) \
  50.               ? mg_size((SV *) av) : AvFILLp(av))
  51.  
  52.